package cn.group.hotel2.service;

import cn.group.hotel2.pojo.dto.RoomCheckInAddNewDTO;
import cn.group.hotel2.pojo.dto.RoomCheckInUpdateDTO;
import cn.group.hotel2.pojo.vo.RoomCheckInListCountVO;
import cn.group.hotel2.pojo.vo.RoomCheckInListItemVO;
import cn.group.hotel2.pojo.vo.RoomCheckInStandardVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 处理入住登记数据相关的业务接口
 *
 * @author wcl
 * @version 0.0.1
 * @date 2022/11/20
 */
@Transactional(rollbackFor = Exception.class)
public interface IRoomCheckInService {

    /**
     * 新增入住登记信息
     * @param roomCheckInAddNewDTO 入住相关的数据
     */
    void addNew(RoomCheckInAddNewDTO roomCheckInAddNewDTO);

    /**
     * 根据记录id删除入住登记单条数据
     * @param id 记录id
     */
    void deleteById(Long id);

    /**
     * 根据id修改入住登记信息
     * @param id 记录id
     * @param roomCheckInUpdateDTO 要修改的入住登记数据
     */
    void updateById(Long id, RoomCheckInUpdateDTO roomCheckInUpdateDTO);

    /**
     * 根据入住登记id查询登记数据
     * @param id 记录id
     * @return 查询到的数据
     */
    RoomCheckInStandardVO getStandardById(Long id);

    /**
     * 查询入住登记前两个数据的列表
     * @return 查询列表结果
     */
    List<RoomCheckInListItemVO> list();

    /**
     * 根据所选的页数来分页查询
     * @param pageNum 需要跳过的记录数
     * @return 查询列表结果
     */
    List<RoomCheckInListItemVO> listByPageNum(Long pageNum);

    /**
     * 查询列表所有的数据以统计其数量
     * @return 查询列表结果
     */
    List<RoomCheckInListCountVO> listCount();

}
